package ClassStudy;

/**
 * @author Cheng Jun
 * Description: 请输入描述
 * @version 1.0
 * @date 2021/8/22 14:34
 */
public class ClassObject {

    public static void main(String[] args) throws Exception {

        // 获取 Student类的 Class类对象 四种方式
        Class<?> aClass = Class.forName("ClassStudy.Student");

        Class<Student> aClass1 = Student.class;

        Student student = new Student();
        Class<? extends Student> aClass2 = student.getClass();

        // 类加载器 获取Class对象
        Class<?> aClass3 = ClassLoader.getSystemClassLoader().loadClass("ClassStudy.Student");

        System.out.println(aClass);
        System.out.println(aClass1);
        System.out.println(aClass2);
        System.out.println(aClass3);
        // 无论哪种方式获取 Class类对象，在堆内存中只有一份 Student 的类对象
        System.out.println("aClass == aClass1 == aClass2 == aClass3: "
                + (aClass == aClass1 && aClass == aClass2 && aClass == aClass3));

        // 基本数据类型 会自动装箱、自动拆箱 int
        Class<Integer> integerClass = int.class;
        System.out.println(integerClass);

        // 基本数据类型的包装类 class java.lang.Integer
        Class<Integer> integerClass1 = Integer.class;
        System.out.println(integerClass1);

        // 基本数据类型的包装类 的  TYPE 常量  (Class<Integer>) Class.getPrimitiveClass("int"); int
        Class<Integer> integerClass2 = Integer.TYPE;
        System.out.println(integerClass2);
    }
}
